//首先我们知道Dart这门语言是单线程的。同步代码的执行会让我们的程序处于过长时间的等待状态终止ANR。
//对于耗时的操作（I/O、网络操作等）我们必须要使用异步来处理它们，只有这样，
// 才不会因为这些耗时的操作来影响程序的正常运行。

//什么是Future
//Future是在未来某个时间获得想要对象的一种手段。
//
//当调用Future后系统会将使用Future的操作放入一个队列中去排队执行，并返回一个未完成的Future对象，
//当事件完成后或者有一个可用的值时Future就会调用自己的then回调让调用者去处理这个对象。
//
//在Flutter中我们可以使用如下两种方式来获取Future。
//
//使用Future APi
//使用async和await (Dart1.9后支持)

//1:声明对象
//Future<String>  waitDinnerFuture=new Future(var);
//2: future 可用方法
//waitDinnerFuture.then((str){});接收上层返回可用的值
//
//waitDinnerFuture.whenComplete((){});事件完成回调
//
//waitDinnerFuture.catchError((error){});事件错误的捕获
//
//waitDinnerFuture.timeout(new Duration(microseconds: 30));超时时间

//3: 同样的我们也可以借助于async和await来获取一个Future对象。

//首先我们需要使用async来修饰需要异步处理的方法上，
// 然后使用await来修饰需要异步操作的地方，然后 这个函数就可以返回一个Future对象了
//void _doSomeThing async(){
//  Future<String> future = await Xx;
//}

//4: future 的其他用法:
//考虑三个功能expensiveA()，expensiveB()以及expensiveC()都返回Future对象

//5:使用then（）链接函数调用

//当Future-returning函数需要按顺序运行时，请使用链式then() 调用：
//expensiveA()
//    .then((aValue) => expensiveB())
//.then((bValue) => expensiveC())
//.then((cValue) => doSomethingWith(cValue));

//6:等待多个Future以完成使用Future.wait（）
//如果功能的执行顺序不重要，可以使用 Future.wait()。
//这些功能快速连续触发; 当他们都完成一个价值，Future.wait()返回一个新的未来。这个未来完成了包含每个函数产生的值的列表
//Future
//    .wait([expensiveA(), expensiveB(), expensiveC()])
//    .then((List responses) => chooseBestResponse(responses))
//    .catchError((e) => handleError(e));
